/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.graficaluna.ui.otros;

import dto.OrdenTrabajoDTO;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import com.graficaluna.service.otros.ServicioDistribuicionOrdenesMaquinas;
import com.graficaluna.service.otros.ServicioMaquina;
import dto.MaquinaDTO;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.primefaces.context.RequestContext;

/**
 *
 * @author ralf
 */
@ManagedBean(name = "asignaOrdenMaquina")
@ViewScoped //dura por todo el tiempo que estes en esa vista.
public class AsignarOrdenMaquinaBean implements Serializable {

    private List<OrdenTrabajoDTO> listaOrdenes = new ArrayList<OrdenTrabajoDTO>();
    private List<MaquinaDTO> listaMaquinas = new ArrayList<MaquinaDTO>();
    private List<String> maquinaSelected = new ArrayList<String>();
    private OrdenTrabajoDTO ordenSelected = new OrdenTrabajoDTO();
    private boolean pintar;
    private String selectMaquina;

    @PostConstruct
    public void listar() {
        try {
            ServicioDistribuicionOrdenesMaquinas servicioDistribucion = new ServicioDistribuicionOrdenesMaquinas();
            listaOrdenes = servicioDistribucion.listarOrdenMaquina();
        } catch (Exception ex) {
            Logger.getLogger(AsignarOrdenMaquinaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String iniciar() {
        return "/views/asignar_ordenes_en_maquinas/asignarOrdenesMaquinas.xhtml?faces-redirect=true";
    }

    public String procesar() {
        try {
            ServicioDistribuicionOrdenesMaquinas servicio = new ServicioDistribuicionOrdenesMaquinas();
            servicio.distribuirOrdenMaquinas();
        } catch (Exception ex) {
            Logger.getLogger(AsignarOrdenMaquinaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return iniciar();
    }

    public void grabar() {
        ServicioDistribuicionOrdenesMaquinas servicio = new ServicioDistribuicionOrdenesMaquinas();
        servicio.actualizarOrdenMaquinas(listaOrdenes);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Se grab&#243; correctamente", ""));
    }

    public void imprimir() {
        try {
            ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
            ServletContext servletContext = (ServletContext) externalContext.getContext();
            File archivo = new File(servletContext.getRealPath("/reportes/acta_distribucion.jasper"));
            ServicioDistribuicionOrdenesMaquinas servicio = new ServicioDistribuicionOrdenesMaquinas();
            byte[] bytes = servicio.verReporte(archivo);
            HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            response.setHeader("Content-Disposition", "atachment; filename=\"distribucion_en_maquinas.pdf\"");
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(bytes, 0, bytes.length);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void mostrarPopupMaquinas(OrdenTrabajoDTO orden) {
        try {
            this.ordenSelected = orden;
            MaquinaDTO m = new MaquinaDTO();
            m.setTipoCarrera(orden.getTipoCarrera());
            listaMaquinas = new ServicioMaquina().listarMaquinasPorCarrera(m);
            if (listaMaquinas != null && !listaMaquinas.isEmpty()) {
                if (!orden.isAsignarVariasMaquinas()) {
                    pintar = false;
                } else {
                    pintar = true;
                }

                if (orden.getCodigoMaquinas() != null && !orden.getCodigoMaquinas().isEmpty()) {
                    String[] l = orden.getCodigoMaquinas().split(",");
                    for (String s : l) {
                        maquinaSelected.add(s);
                    }
                }
            }
        } catch (Exception ex) {
            Logger.getLogger(AsignarOrdenMaquinaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String grabarMaquinas() {
        try {
            OrdenTrabajoDTO ord = new OrdenTrabajoDTO();
            ord.setCodigo(ordenSelected.getCodigo());
            new ServicioDistribuicionOrdenesMaquinas().eliminarOrdenMaquina(ord);
            if (pintar) {
                for (String s : maquinaSelected) {
                    ord = new OrdenTrabajoDTO();
                    ord.setCodigo(ordenSelected.getCodigo());
                    ord.setCodigoMaquina(new Long(s));
                    new ServicioDistribuicionOrdenesMaquinas().insertarOrdenMaquina(ord, s);
                }
            } else {
                ord = new OrdenTrabajoDTO();
                ord.setCodigo(ordenSelected.getCodigo());
                ord.setCodigoMaquina(new Long(selectMaquina));
                new ServicioDistribuicionOrdenesMaquinas().insertarOrdenMaquina(ord, selectMaquina);
            }
            RequestContext.getCurrentInstance().execute("asignarMaquina.hide()");
        } catch (Exception ex) {
            Logger.getLogger(AsignarOrdenMaquinaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
        return iniciar();
    }
    //<editor-fold defaultstate="collapsed" desc="setters and getters">
    /**
     * @return the listaOrdenes
     */
    public List<OrdenTrabajoDTO> getListaOrdenes() {
        return listaOrdenes;
    }

    /**
     * @param listaOrdenes the listaOrdenes to set
     */
    public void setListaOrdenes(List<OrdenTrabajoDTO> listaOrdenes) {
        this.listaOrdenes = listaOrdenes;
    }

    /**
     * @return the listaMaquinas
     */
    public List<MaquinaDTO> getListaMaquinas() {
        return listaMaquinas;
    }

    //</editor-fold>
    /**
     * @return the maquinaSelected
     */
    public List<String> getMaquinaSelected() {
        return maquinaSelected;
    }

    /**
     * @param maquinaSelected the maquinaSelected to set
     */
    public void setMaquinaSelected(List<String> maquinaSelected) {
        this.maquinaSelected = maquinaSelected;
    }

    /**
     * @return the orden
     */
    public OrdenTrabajoDTO getOrden() {
        return ordenSelected;
    }

    /**
     * @param orden the orden to set
     */
    public void setOrden(OrdenTrabajoDTO orden) {
        this.ordenSelected = orden;
    }

    /**
     * @return the pintar
     */
    public boolean isPintar() {
        return pintar;
    }

    /**
     * @param pintar the pintar to set
     */
    public void setPintar(boolean pintar) {
        this.pintar = pintar;
    }

    /**
     * @return the selectMaquina
     */
    public String getSelectMaquina() {
        return selectMaquina;
    }

    /**
     * @param selectMaquina the selectMaquina to set
     */
    public void setSelectMaquina(String selectMaquina) {
        this.selectMaquina = selectMaquina;
    }
}
